/*
 * Copyright 2005 ShenYang Boyasi Co. Ltd.
 * All right reserved.
 */

package com.wm.comm;
import java.awt.*;
import java.awt.image.*;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import org.apache.commons.lang.RandomStringUtils;

/**
 * �漴ͼƬ�����
 * ���������û�ע��ʱ����Ҫ�û����ͼƬ���ݽ�����д��ȷ�󷽿�ע��
 * @author Liudong
 */
public class RandomImageGenerator {

//�漴��ɰ���֤����ַ�    

public static String random() {
        //20060320 add by wyx
        //��Ϊo��0,l��1�������,����,ȥ���Сд��o��l

        String str = "";
        str = "abcdefghijklmnopqrstuvwxyz";//��ʼ������
        return RandomStringUtils.random(4, str);//����6Ϊ���ַ�
            }

    /**
     * ���Ҫ����������ͼƬ,����Ϊ��ɫ,�����С16,������ɫ��ɫ����
     * @param num Ҫ��ɵ�����
     * @param out �����
     * @throws IOException
     */
    public static void render(String num, OutputStream out) throws IOException {
        if (num.getBytes().length > 4) {
            throw new IllegalArgumentException(
                    "The length of param num cannot exceed 4.");
        }
        //�趨��Ⱥ͸߶�
        int width = 90; 

        int height = 30; 
        // ���ڴ��д���ͼ��
        BufferedImage bi = new BufferedImage(width, height,
                                             BufferedImage.TYPE_INT_RGB);
        // ��ȡͼ��������
        Graphics2D g = (Graphics2D) bi.getGraphics();
        //���߿�
        java.util.Random random = new java.util.Random();
        g.setColor(Color.white);
        g.fillRect(0, 0, width, height);
        //��������
        Font mFont = new Font("Tahoma", Font.BOLD, 16);
        g.setFont(mFont);
        g.setColor(Color.BLACK);//����������ɫ
        //����֤��,ÿ����֤���ڲ�ͬ��ˮƽλ��
        String str1[] = new String[4];
        for (int i = 0; i < str1.length; i++) {
            str1[i] = num.substring(i, i + 1);
            int w = 0;
            int x = (i + 1) % 3;

//�漴�����֤���ַ��ˮƽƫ��
            if (x == random.nextInt(3)) {
                w = 19 - random.nextInt(7);
            } else {
                w = 19 + random.nextInt(7);
            }

//�漴�����ɫ
            Color color1 = new Color(random.nextInt(180), random.nextInt(180),
                                     random.nextInt(180));
            g.setColor(color1);
            g.drawString(str1[i], 20 * i + 10, w);
        }

        // ��������ŵ�,���ò�ͬ����ɫ��ʾ��ʹͼ���е���֤�벻�ױ��������̽�⵽
        for (int i = 0; i < 100; i++) {
            int x = random.nextInt(width);
            int y = random.nextInt(height);
            Color color1 = new Color(random.nextInt(255), random.nextInt(255),
                                     random.nextInt(255));
            g.setColor(color1); //�漴��������ɫ�ĵ�
            g.drawOval(x, y, 0, 0);
        }
        //��������
//        for (int i = 0; i < 5; i++) {
//            int x = random.nextInt(width);
//            int y = random.nextInt(height);
//            int x1 = random.nextInt(width);
//            int y1 = random.nextInt(height);
//            Color color1 = new Color(random.nextInt(255), random.nextInt(255),
//                                     random.nextInt(255));
//
//            g.setColor(color1); //�漴��������ɫ����
//            g.drawLine(x, y, x1, y1);
//        }
        //ͼ����Ч
        g.dispose();
        //���ҳ��
        ImageIO.write(bi, "jpg", out);
    }

    public static void main(String[] args) throws IOException {
        String num = random();
        System.out.println(num);
        render(num, new FileOutputStream("D:\\test.jpg"));
        System.out.println("Image generated.");
    }
}
